package acwing_02;

import java.util.Scanner;

public class _837_连通块中点的数量 {
	static int N = 100010;
	static int n;
	static int m;
	static int p[];
	static int size[];
	static StringBuilder stb = new StringBuilder();
	static String op;
	static int a;
	static int b;
	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		n = scan.nextInt();
		m = scan.nextInt();
		p = new int[N];
		size = new int[N];
		
		for(int i = 1; i <= n; i++) {
			p[i] = i;
			size[i] = 1;
		}
		
		for(int i = 0 ; i < m ; i++) {
			op = scan.next();
			// 连边（合并
			if(op.equals("C")) {
				a = scan.nextInt();
				b = scan.nextInt();
				// 判断父节点是否相同，相同则不需要连通，有相同父节点说明已连通
				if(find(a) == find(b)) {
					continue;
				}
				// a根节点接入b根节点下面
				// 需要先把a节点中的元素个数加到b中
				// 如果先接入节点再加size，会导致a拿到查到的根节点是b，拿到b的size
				size[find(b)] += size[find(a)];
				// 将元素a所在的根节点的父元素的值，修改为元素b所在的根节点
				p[find(a)] = find(b);
			}else if(op.equals("Q1")) {
				a = scan.nextInt();
				b = scan.nextInt();
				// 父节点相同说明是连通的
				if(find(a) == find(b)) {
					stb.append("Yes\n");
				}else {
					stb.append("No\n");
				}
			}else if(op.equals("Q2")) {
				a = scan.nextInt();
				// 找到a的根节点的size，根节点中存储包含a的整个树的size
				stb.append(size[find(a)] + "\n");
			}
		}
		
		System.out.print(stb.toString());
		
		scan.close();
		
	}
	
	public static int find(int x) {

		if(p[x] != x) {
			p[x] = find(p[x]);
		}
		
		return p[x];
	}
}
